<!DOCTYPE html>
<html lang="zh-CN">
    <head>
  <!-- 元数据 -->
  <meta charset="utf-8">
  
  
  <title>HTTP基础 | 月蝉の小窝</title>
  
  <meta name="author" content="月蝉" />
  <meta http-equiv="Cache-Control" content="no-transform" />
  <meta http-equiv="Cache-Control" content="no-siteapp" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <meta name="robots" content="index,follow" />
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
  <meta name="format-detection" content="telphone=no, email=no" />
  
    <meta name="keywords" content="HTTP, 协议, 基础" />
  
  <meta name="description" content="使用HTTP协议访问Web你知道当我们在网页浏览器(Web browser)的地址栏中输入URL时，Web页面是如何呈现的吗？Web页面当然不能凭空显示出来。根据Web浏览器地址栏中指定的URL，Web浏览器从Web服务器端获取文件资源(resouree)等信息，从而显示出Web页面。像这种通过发送请求获取服务器资源的Web浏览器等，都可称为客户端(client)。Web使用一种名为HTTP(Hy">
<meta property="og:type" content="article">
<meta property="og:title" content="HTTP基础">
<meta property="og:url" content="https://moon-cicada.gitee.io/blog/2023/11/03/HTTP/HTTP%E5%9F%BA%E7%A1%80/index.html">
<meta property="og:site_name" content="月蝉の小窝">
<meta property="og:description" content="使用HTTP协议访问Web你知道当我们在网页浏览器(Web browser)的地址栏中输入URL时，Web页面是如何呈现的吗？Web页面当然不能凭空显示出来。根据Web浏览器地址栏中指定的URL，Web浏览器从Web服务器端获取文件资源(resouree)等信息，从而显示出Web页面。像这种通过发送请求获取服务器资源的Web浏览器等，都可称为客户端(client)。Web使用一种名为HTTP(Hy">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://moon-cicada.gitee.io/blog/images/HTTP/images/1/1.png">
<meta property="og:image" content="https://moon-cicada.gitee.io/blog/images/HTTP/images/1/2.png">
<meta property="og:image" content="https://moon-cicada.gitee.io/blog/images/HTTP/images/1/3.jpg">
<meta property="og:image" content="https://moon-cicada.gitee.io/blog/images/HTTP/images/1/4.png">
<meta property="og:image" content="https://moon-cicada.gitee.io/blog/images/HTTP/images/1/5.png">
<meta property="og:image" content="https://moon-cicada.gitee.io/blog/images/HTTP/images/1/6.png">
<meta property="og:image" content="https://moon-cicada.gitee.io/blog/images/HTTP/images/1/7.png">
<meta property="og:image" content="https://moon-cicada.gitee.io/blog/images/HTTP/images/1/8.png">
<meta property="og:image" content="https://moon-cicada.gitee.io/blog/images/HTTP/images/1/9.png">
<meta property="og:image" content="https://moon-cicada.gitee.io/blog/images/HTTP/images/1/10.png">
<meta property="og:image" content="https://moon-cicada.gitee.io/blog/images/HTTP/images/1/11.png">
<meta property="og:image" content="https://moon-cicada.gitee.io/blog/images/HTTP/images/1/12.png">
<meta property="article:published_time" content="2023-11-03T10:55:30.000Z">
<meta property="article:modified_time" content="2023-11-03T11:03:21.282Z">
<meta property="article:author" content="月蝉">
<meta property="article:tag" content="基础">
<meta property="article:tag" content="HTTP">
<meta property="article:tag" content="协议">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://moon-cicada.gitee.io/blog/images/HTTP/images/1/1.png">
  
  <!-- 站点验证相关 -->
  
    
    
    
  
  <!-- 样式表文件 -->
  <link rel="stylesheet" id="kratos-css" href="/blog/css/kratosr.min.css" media="all"></script>
  
    <link rel="stylesheet" id="darkmode-css" href="/blog/css/kr-color-dark.min.css" media="(prefers-color-scheme: dark)"></script>
    <script src="/blog/js/kr-dark.min.js"></script>
  
  
    <link rel="stylesheet" id="highlight-css" href="/blog/css/highlight/night-eighties.min.css" media="all"></script>
  
  <link rel="stylesheet" id="fontawe-css" href="/blog/vendors/font-awesome@4.7.0/css/font-awesome.min.css" media="all"></script>
  <link rel="stylesheet" id="nprogress-css" href="/blog/vendors/nprogress@0.2.0/nprogress.css" media="all"></script>
  
  
    <link rel="stylesheet" href="/blog/vendors/aplayer@1.10.1/dist/APlayer.min.css"></script>
  
  
    <link rel="stylesheet" href="/blog/vendors/@fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.css"></script>
  
  <!-- 不得不预先加载的一些JS文件 -->
  <script src="/blog/vendors/jquery@3.6.0/dist/jquery.min.js"></script>
  
    <script src="/blog/vendors/qrcode_js@1.0.0/qrcode.min.js"></script>
  
  
  <style>
    
    
  </style>
  
<meta name="generator" content="Hexo 6.3.0"></head>


    <body class="custom-background">
        <div id="kratos-wrapper">
    <div id="kratos-page">
        <div id="kratos-header">
            <header id="kratos-desktop-topnav" class="kratos-topnav">
                <div class="container">
                    <div class="nav-header">
                        <nav id="kratos-menu-wrap">
                            <ul id="kratos-primary-menu" class="sf-menu">
                                
                                    
                                    
                                        
                                            <li><a href="/blog/"><i class="fa fa-home"></i>首页</a></li>
                                        
                                    
                                        
                                            <li><a href="/blog/archives/"><i class="fa fa-file"></i>档案馆</a></li>
                                        
                                    
                                        
                                            <li><a href="/blog/about/"><i class="fa fa-paper-plane"></i>关于我</a></li>
                                        
                                    
                                
                            </ul>
                        </nav>
                    </div>
                </div>
            </header>
            <header id="kratos-mobile-topnav" class="kratos-topnav">
                <div class="container">
                    <div class="color-logo"><a href="/blog/">月蝉の小窝</a></div>
                    <div class="nav-toggle">
                        <a class="kratos-nav-toggle js-kratos-nav-toggle">
                            <i></i>
                        </a>
                    </div>
                </div>
            </header>
        </div>
        <div class="kratos-start kratos-hero-2">
            <!-- <div class="kratos-overlay"></div> -->
            <div class="kratos-cover kratos-cover-2 text-center">
                <div class="desc desc2 animate-box">
                    <a href="/blog/">
                        <h2>月蝉の小窝</h2> <br />
                        <span></span>
                    </a>
                </div>
            </div>
        </div>

        <div id="kratos-blog-post">
            <div class="container">
                <div id="main" class="row">
                    

        

            <section class="col-md-8">

        

            <article itemscope itemtype="https://schema.org/Article">
    
    <link itemprop="mainEntityOfPage" href="https://moon-cicada.gitee.io/blog/2023/11/03/HTTP/HTTP%E5%9F%BA%E7%A1%80/">
    <div class="kratos-hentry kratos-post-inner clearfix">
        <header class="kratos-entry-header">
            
                <h1 class="kratos-entry-title text-center" itemprop="name headline">HTTP基础</h1>
            
            
            <ul class="kratos-post-meta text-center">
                <li><time datetime="2023-11-03T10:55:30.000Z" itemprop="datePublished"><i class="fa fa-calendar"></i> 2023-11-03</time></li>
                <li itemprop="author" itemscope itemtype="https://schema.org/Person">
                    <i class="fa fa-user"></i> 作者 <span itemprop="name">月蝉</span>
                </li>
                
                    <li>
                        <i class="fa fa-edit"></i> 
                        
                        
                            ~8.13K
                        
                        字
                    </li>
                
                
                    <li id="/blog/2023/11/03/HTTP/HTTP%E5%9F%BA%E7%A1%80/" class="leancloud_visitors" data-flag-title="HTTP基础">
                        <i class="fa fa-eye"></i>
                        <span class="leancloud-visitors-count"> </span> 次阅读
                    </li>
                
            </ul>
        </header>
        <div class="kratos-post-content">
            
            <div id="expire-alert" class="alert alert-warning hidden" role="alert">
                <div class="icon"><i class="fa fa-warning"></i></div>
                <div class="text"><p>本文最后编辑于 <time datetime="1699009401282"></time> 前，其中的内容可能需要更新。</p></div>
            </div>
            
            
            
                <div class="kratos-post-inner-toc toc-div-class" >
                    <ol class="toc"><li class="toc-item toc-level-2"><a class="toc-link" href="#%E4%BD%BF%E7%94%A8HTTP%E5%8D%8F%E8%AE%AE%E8%AE%BF%E9%97%AEWeb"><span class="toc-number">1.</span> <span class="toc-text">使用HTTP协议访问Web</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#HTTP%E7%9A%84%E8%AF%9E%E7%94%9F"><span class="toc-number">2.</span> <span class="toc-text">HTTP的诞生</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#%E4%B8%BA%E7%9F%A5%E8%AF%86%E5%85%B1%E4%BA%AB%E8%80%8C%E8%A7%84%E5%88%92Web"><span class="toc-number">2.1.</span> <span class="toc-text">为知识共享而规划Web</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#Web%E6%88%90%E9%95%BF%E6%97%B6%E4%BB%A3"><span class="toc-number">2.2.</span> <span class="toc-text">Web成长时代</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E9%A9%BB%E8%B6%B3%E4%B8%8D%E5%89%8D%E7%9A%84HTTP"><span class="toc-number">2.3.</span> <span class="toc-text">驻足不前的HTTP</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E7%BD%91%E7%BB%9C%E5%9F%BA%E7%A1%80TCP-IP%E4%BB%8B%E7%BB%8D"><span class="toc-number">3.</span> <span class="toc-text">网络基础TCP&#x2F;IP介绍</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#TCP-IP%E5%8D%8F%E8%AE%AE%E6%97%8F"><span class="toc-number">3.1.</span> <span class="toc-text">TCP&#x2F;IP协议族</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#TCP-IP%E7%9A%84%E5%88%86%E5%B1%82%E7%AE%A1%E7%90%86"><span class="toc-number">3.2.</span> <span class="toc-text">TCP&#x2F;IP的分层管理</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#TCP-IP%E9%80%9A%E4%BF%A1%E4%BC%A0%E8%BE%93%E6%B5%81"><span class="toc-number">3.3.</span> <span class="toc-text">TCP&#x2F;IP通信传输流</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E4%B8%8EHTTP%E5%85%B3%E7%B3%BB%E5%AF%86%E5%88%87%E7%9A%84%E5%8D%8F%E8%AE%AE%EF%BC%9AIP%E3%80%81TCP%E5%92%8CDNS"><span class="toc-number">4.</span> <span class="toc-text">与HTTP关系密切的协议：IP、TCP和DNS</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#%E8%B4%9F%E8%B4%A3%E4%BC%A0%E8%BE%93%E7%9A%84IP%E5%8D%8F%E8%AE%AE"><span class="toc-number">4.1.</span> <span class="toc-text">负责传输的IP协议</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E7%A1%AE%E4%BF%9D%E5%8F%AF%E9%9D%A0%E6%80%A7%E7%9A%84TCP%E5%8D%8F%E8%AE%AE"><span class="toc-number">4.2.</span> <span class="toc-text">确保可靠性的TCP协议</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E8%B4%9F%E8%B4%A3%E5%9F%9F%E5%90%8D%E8%A7%A3%E6%9E%90%E7%9A%84DNC%E6%9C%8D%E5%8A%A1"><span class="toc-number">5.</span> <span class="toc-text">负责域名解析的DNC服务</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%90%84%E7%A7%8D%E5%8D%8F%E8%AE%AE%E4%B8%8EHTTP%E5%8D%8F%E8%AE%AE%E7%9A%84%E5%85%B3%E7%B3%BB"><span class="toc-number">6.</span> <span class="toc-text">各种协议与HTTP协议的关系</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#URI%E5%92%8CURL"><span class="toc-number">7.</span> <span class="toc-text">URI和URL</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#%E7%BB%9F%E4%B8%80%E8%B5%84%E6%BA%90%E6%A0%87%E8%AF%86%E7%AC%A6"><span class="toc-number">7.1.</span> <span class="toc-text">统一资源标识符</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#URI%E6%A0%BC%E5%BC%8F"><span class="toc-number">7.2.</span> <span class="toc-text">URI格式</span></a></li></ol></li></ol>
                </div>
            
            <hr />
            <div itemprop="articleBody"><h2 id="使用HTTP协议访问Web"><a href="#使用HTTP协议访问Web" class="headerlink" title="使用HTTP协议访问Web"></a>使用HTTP协议访问Web</h2><p>你知道当我们在网页浏览器(Web browser)的地址栏中输入URL时，Web页面是如何呈现的吗？<br /><br><img src="/blog/images/HTTP/images/1/1.png"><br /><br>Web页面当然不能凭空显示出来。根据Web浏览器地址栏中指定的URL，Web浏览器从Web服务器端获取文件资源(resouree)等信息，从而显示出Web页面。<br /><br>像这种通过发送请求获取服务器资源的Web浏览器等，都可称为客户端(client)。<br /><br><img src="/blog/images/HTTP/images/1/2.png"><br /><br>Web使用一种名为HTTP(HyperText Transfer Protocol,超文本传输协议)的协议作为规范，完成从客户端到服务器端等一系列运作流程。而协议是指规定的约定。可以说，Web是建立在HTTP协议上通信的。<br /></p>
<blockquote>
<p>HTTP通常被译为超文本传输协议，但这种译法并不严谨。严谨的译名应该为“超文本转移协议”。<br /></p>
</blockquote>
<h2 id="HTTP的诞生"><a href="#HTTP的诞生" class="headerlink" title="HTTP的诞生"></a>HTTP的诞生</h2><h3 id="为知识共享而规划Web"><a href="#为知识共享而规划Web" class="headerlink" title="为知识共享而规划Web"></a>为知识共享而规划Web</h3><p>1989年3月，互联网还只属于少数人。在这一互联网的黎明期，HTTP诞生了。<br /><br><img src="/blog/images/HTTP/images/1/3.jpg"><br /><br>CERN(欧洲核子研究组织)的蒂姆·伯纳斯-李(Tim Berners-Lee)博士提出了一种能让远隔两地的研究者们共享知识的设想。<br /><br>最初设想的基本理念是：借助多文档之间相互关联形成的超文本(HyperText)，连成可相互参阅的WWW(World Wide Web，万维网)。<br /><br>现在已提出了3项WWW构建技术，分别是：把SGML(Standard Generalized Markup Language，标准通用标记语言)作为页面的文本标记语言的HTML(HyperText Markup Language，超文本标记语言)；作为文档传递协议的HTTP；指定文档所在地址的URL(Uniform Resource Locator，统一资源定位符)。<br /><br>WWW这一名称，是Web浏览器当年用来浏览超文本的客户端应用程序时的名称。现在则用来表示这一系列的集合，也可简称为Web。<br /></p>
<h3 id="Web成长时代"><a href="#Web成长时代" class="headerlink" title="Web成长时代"></a>Web成长时代</h3><p>1990年11月，CERN成功研发了世界上第一台Web服务器和Web浏览器。两年后的1992年9月，日本第一个网站的主页上线了。</p>
<ul>
<li>日本的第一个主页<br /><br><a target="_blank" rel="noopener" href="http://www.ibarakiken.gr.jp/www/">http://www.ibarakiken.gr.jp/www/</a> <br /><br>1990年，大家针对HTML1.0草案进行了讨论，因HTML1.0中存在多出模糊不清的部分，草案被直接废弃了。</li>
<li>HTML1.0<br /><br><a target="_blank" rel="noopener" href="http://www.w3.org/MarkUp/draft-ietf-iiir-html-01.txt">http://www.w3.org/MarkUp/draft-ietf-iiir-html-01.txt</a> <br /><br>1993年1月，现代浏览器的祖先NCSA(National Center for Supercomputer Applications，美国国家超级计算机应用中心)研发的Mosaic问世了。它以in-line(内联)等形式显示HTML的图像，在图像反面出色的表现使它迅速在世界范围内流行开来。<br /><br>同年秋天，Mosaic的Windows版和Macintosh版面世。使用CGI技术的NCSA Web服务器、NCSA HTTPd1.0也差不多是在这个时期出现的。</li>
<li>NCSA Mosaic bounce page<br /><br><a target="_blank" rel="noopener" href="http://archive.ncsa.illinois.edu/mosaic.html">http://archive.ncsa.illinois.edu/mosaic.html</a> <br /></li>
<li>The NCSA HTTPd Home Page(存档)<br /><br><a target="_blank" rel="noopener" href="http://web.archive.org/web/20090426182129/http://hoohoo.ncsa.illinois.edu/">http://web.archive.org/web/20090426182129/http://hoohoo.ncsa.illinois.edu/</a>(原址已失效)<br /><br>1994年的12月，网景通信公司发布了Netscape Navigator 1.0，1995年微软公司发布Internet Explorer 1.0 和 2.0。<br /><br>紧随其后的是现在已然成为Web服务器标准之一的Apache，当时它以Apache 0.2的姿态出现在世人眼前。而HTML也发布了2.0版本。那一年，Web技术的发展突飞猛进。<br /><br>时光流转，从1995年左右起，微软公司与网景通信公司之间爆发的浏览器大战愈演愈烈。两家公司都各自对HTML做了扩展，于是导致在写HTML页面时，必须考虑兼容他们两家公司的浏览器。时至今日，这个问题仍令那些写前端页面的工程师感到棘手。<br /><br>在这场浏览器供应商之间的竞争中，他们不仅对当时发展中的各种Web标准化视而不见，还屡次出现新增功能没有对应说明文档的情况。<br /><br>2000年前后，这场浏览器战争随着网景通信公司的衰落而暂告一段落。但就在2004年，Mozilla基金会发布了Firefox浏览器，第二次浏览器大战随即爆发。<br /><br>Internet Explorer 浏览器的版本从6升到7前后花费了5年时间。之后接连不断地发布了8、9、10版本。另外，Chorome、Opera、Safari等浏览器也纷纷抢占市场份额。<br /></li>
</ul>
<h3 id="驻足不前的HTTP"><a href="#驻足不前的HTTP" class="headerlink" title="驻足不前的HTTP"></a>驻足不前的HTTP</h3><ul>
<li><p>HTTP&#x2F;0.9<br>HTTP于1990年问世。那时的HTTP并没有作为正式的标准被建立。这时的HTTP其实含有HTTP&#x2F;1.0之前版本的意思，因此被称为HTTP&#x2F;0.9。</p>
</li>
<li><p>HTTP&#x2F;1.0<br>HTTP正式作为标准被公布是在1996年的5月，版本被命名为HTTP&#x2F;1.0，并记载于RFC1945。虽说是初期标准，但该协议标准至今仍被广泛使用在服务器端。</p>
<ul>
<li>RFC1945 - Hypertext Transfer Protocol – HTTP&#x2F;1.0<br /><br><a target="_blank" rel="noopener" href="http://www.ietf.org/rfc/rfc1945.txt">http://www.ietf.org/rfc/rfc1945.txt</a><br /></li>
<li>RFC2616 - Hypertext Transfer Protocol – HTTP&#x2F;1.1<br /><br><a target="_blank" rel="noopener" href="http://www.ietf.org/rfc/rfc2616.txt">http://www.ietf.org/rfc/rfc2616.txt</a><br /></li>
</ul>
<p>可见，作为Web文档传输协议的HTTP，它的版本几乎没有更新。新一代HTTP&#x2F;2.0正在制定中，但要达到较高的覆盖率，仍需假以时日。<br /><br>当年HTTP协议的出现主要是为了解决文本传输的难题。由于协议本身非常简单，于是在此基础上设想了很多应用方法并投入了实际应用。现在HTTP协议已超出了Web这个框架的局限，被运用到了各种场景里。<br /></p>
</li>
</ul>
<h2 id="网络基础TCP-IP介绍"><a href="#网络基础TCP-IP介绍" class="headerlink" title="网络基础TCP&#x2F;IP介绍"></a>网络基础TCP&#x2F;IP介绍</h2><p>通常使用的网络(包括互联网)是在TCP&#x2F;IP协议族的基础上运作的。而HTTP属于它内部的一个子集。<br /></p>
<h3 id="TCP-IP协议族"><a href="#TCP-IP协议族" class="headerlink" title="TCP&#x2F;IP协议族"></a>TCP&#x2F;IP协议族</h3><p>计算机与网络设备要相互通信，双方就必须基于相同的方法。比如，如何探测到通信目标、由哪一边先发起通信、使用哪种语言进行通信、增氧结束通信等规则都需要事先确定。不同的硬件、操作系统之间的通信，所有的这一切都需要一种规则。而我们就把这种规则称为协议(protocol)。<br /><br><img src="/blog/images/HTTP/images/1/4.png" alt="TCP/IP是互联网相关的各类协议族的总称"><br /><br>协议中存在各式各样的内容。从电缆的规格到IP地址的选定方法、寻找异地用户的方法、双方建立通信的顺序，以及Web页面显示需要处理的步骤，等等。<br /><br>像这样把与互联网相关联的协议集合起来总称为TCP&#x2F;IP。也有说法认为，TCP&#x2F;IP是指TCP和IP这两种协议。还有一种说法认为，TCP&#x2F;IP是在IP协议的通信过程中，使用到的协议族的统称。</p>
<h3 id="TCP-IP的分层管理"><a href="#TCP-IP的分层管理" class="headerlink" title="TCP&#x2F;IP的分层管理"></a>TCP&#x2F;IP的分层管理</h3><p>TCP&#x2F;IP协议族里最重要的一点就是分层。TCP&#x2F;IP协议族按层次分别分为以下4层：应用层、传输层、网络层和数据链路层。<br /><br>把TCP&#x2F;IP层次化是有好处的。比如，如果互联网只由一个协议统筹，某个地方需要改变设计时，就必须把所有部分整体替换掉。而分层之后只需把变动的层替换掉即可。把各层之间的接口部分规划好之后，每个层次内部的设计就能够自由改动了。<br /><br>值得一提的是，层次化之后，设计也变得相对简单了。处于应用层上的应用可以只考虑分派给自己的任务，而不需要弄清对方在地球上哪个地方、对方的传输路线是怎样的、是否确保传输送达等问题。<br /><br>TCP&#x2F;IP协议族各层的作用如下：</p>
<ul>
<li>应用层<br /><br>应用层决定了向用户提供应用服务时通信的活动。<br /><br>TCP&#x2F;IP协议族内预存了各类通用的应用服务。比如，FTP(File Transfer Protocal，文件传输协议)和DNS(Domain Name System，域名系统)服务就是其中两类。<br /><br>HTTP协议也处于该层。<br /></li>
<li>传输层<br /><br>传输层对上层应用层，提供处于网络连接中的两台计算机之间的数据传输。<br /><br>在传输层有两个性质不同的协议：TCP(Transmission Control Protocol，传输控制协议)和UDP(User Datagram Protocol，用户数据报协议)。<br /></li>
<li>网络层<br /><br>网络层用来处理在网络上流动的数据包。数据包是网络传输的最小数据单位。该层规定了通过怎样的路径(所谓的传输路线)到达对方计算机，并把数据包传送给对方。<br /><br>所起的作用就是在众多的选项中选择一条传输路线。<br /></li>
<li>链路层(又名数据链路层，网络接口层)<br /><br>用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动、NIC(Network Interface Card，网络适配器，即网卡)，及光纤等物理可见部分(还包括连接器等一切传输媒介)。硬件上的范畴均在链路层的作用范围之内。<br /></li>
</ul>
<h3 id="TCP-IP通信传输流"><a href="#TCP-IP通信传输流" class="headerlink" title="TCP&#x2F;IP通信传输流"></a>TCP&#x2F;IP通信传输流</h3><p><img src="/blog/images/HTTP/images/1/5.png"><br /><br>利用TCP&#x2F;IP协议族进行网络通信时，会通过分层顺序与对方进行通信。发送端从应用层往下走。接收端则从链路层往上走。<br /><br>我们用HTTP举例来说明，首先作为发送端的客户端在应用层(HTTP协议)发出一个想看某个Web页面的HTTP请求。<br /><br>接着，为了传输方便，在传输层(TCP协议)把从应用层处收到的数据(HTTP请求报文)进行分割，并在各个报文上打上标记序号及端口号后转发给网络层。<br /><br>在网络层(IP协议)，增加作为通信目的地的MAC地址后转发给链路层。这样一来，发往网络的通信请求就准备齐全了。<br /><br>接收端的服务器在链路层接收到数据，按序往上层发送，一直到应用层。当传输到应用层，才能算真正接收到由客户端发送过来的HTTP请求。<br /><br><img src="/blog/images/HTTP/images/1/6.png"> <br /><br>发送端在层与层之间传输数据时，每经过一层时必定会被打上一个该层所属的首部信息。反之，接收端在层与层传输数据时，每经过一层时会把对应的首部消去。<br /><br>这种把数据信息包装起来的做法称为封装(encapsulate)。<br /></p>
<h2 id="与HTTP关系密切的协议：IP、TCP和DNS"><a href="#与HTTP关系密切的协议：IP、TCP和DNS" class="headerlink" title="与HTTP关系密切的协议：IP、TCP和DNS"></a>与HTTP关系密切的协议：IP、TCP和DNS</h2><h3 id="负责传输的IP协议"><a href="#负责传输的IP协议" class="headerlink" title="负责传输的IP协议"></a>负责传输的IP协议</h3><p>按层次分，IP(Internet Protocol)网际协议位于网络层。Internet Protocol这个名称可能听起来有点夸张，但事实正是如此，因为几乎所有使用网络的系统都会用到IP协议。TCP&#x2F;IP协议族中的IP指的就是网际协议，协议名称中占据了一半位置，其重要性可见一斑。<br /><br>IP协议的作用是把各种数据包传送给对方。而要保证确实传送到对方那里，则需要满足各类条件。其中两个重要的条件是IP地址和MAC地址(Media Access Control Address，媒体访问控制地址)。<br /><br>IP地址指明了节点被分配到的地址，MAC地址是指网卡所属的固定地址。IP地址可以和MAC地址进行配对。IP地址可变换，但MAC地址基本上不会更改。<br /></p>
<ul>
<li>使用ARP协议凭借MAC地址进行通信<br>IP间的通信依赖MAC地址。在网络上，通信的双方在同一局域网(LAN)内的情况是很少的，通常是经过多台计算机和网络设备中转才能连接到对方。而在进行中转时，会利用下一站中转设备的MAC地址来搜索下一个中转目标。这时，会采用ARP协议(Address Resolution Protocol，地址解析协议)。ARP是一种用以解析地址的协议，根据通信方的IP地址就可以反查出对应的MAC地址。<br /></li>
<li>没有人能够全面掌握互联网中的传输状况<br>在到达通信目标前的中转过程中，那些计算机和路由器等网络设备只能获悉很粗略的传输路线。<br /><br>这种机制称为路由选择(routing)，有点像快递公司的送货过程。想要寄快递的人，只要将自己的货物送到集散中心，就可以知道快递公司是否肯收件发货，该快递公司的集散中心检查货物的送达地址，明确下站该送往哪个区域的集散中心。接着，那个区域的集散中心自会判断是否能送到对方的家中。<br /><br>通过这个比喻说明，无论哪台计算机、哪台网络设备，它们都无法全面掌握互联网中的细节。<br /><br><img src="/blog/images/HTTP/images/1/7.png"> <br /></li>
</ul>
<h3 id="确保可靠性的TCP协议"><a href="#确保可靠性的TCP协议" class="headerlink" title="确保可靠性的TCP协议"></a>确保可靠性的TCP协议</h3><p>按层次分，TCP位于传输层，提供可靠的字节流服务。<br /><br>所谓的字节流服务(Byte Stream Service)是指，为了方便传输，将大块数据分割成以报文段(segment)为单位的数据包进行管理。而可靠的传输服务是指，能够把数据准确可靠地传给对方。一言以蔽之，TCP协议为了更容易传送大数据才把数据分割，而且TCP协议能够确认数据最终是否送达到对方。<br /></p>
<ul>
<li>确保数据能到达目标<br>为了准确无误地将数据送达目标处，TCP协议采用了三次握手(three-way handshaking)策略。用TCP协议把数据包送出去后，TCP不会对传送后的情况置之不理，它一定会向对方确认是否成功送达。握手过程中使用了TCP的标志(flag) —— SYN(synchronize) 和 ACK(acknowledgement)。<br /><br>发送端首先发送一个带有SYN标志的数据包给对方。接收端收到后，回传一个带有SYN&#x2F;ACK标志的数据包以示传达确认信息。最后，发送端再回传一个带ACK标志的数据包，代表“握手”结束。<br /><br>若在握手过程中某个阶段莫名中断，TCP协议会再次以相同的顺序发送相同的数据包。<br /><br><img src="/blog/images/HTTP/images/1/8.png"><br /><br>除了上述三次握手，TCP协议还有其他各种手段来保证通信的可靠性。<br /></li>
</ul>
<h2 id="负责域名解析的DNC服务"><a href="#负责域名解析的DNC服务" class="headerlink" title="负责域名解析的DNC服务"></a>负责域名解析的DNC服务</h2><p>DNS(Domain Name System)服务是和HTTP协议一样位于应用层的协议。它提供域名到IP地址之间的解析服务。<br /><br>计算机既可以被赋予IP地址，也可以被赋予主机名和域名。比如<a target="_blank" rel="noopener" href="http://www.hackr.ip./">www.hackr.ip。</a><br /><br>用户通常使用主机名或域名来访问对方的计算机，而不是直接通过IP地址访问。因为与IP地址的一组纯数字相比，用字母配合数字的表示形式来指定计算机名更符合人类的记忆习惯。<br /><br>但要让计算机去理解名称，相对而言就变得困难了。因为计算机更擅长处理一长串数字。<br /><br>为了解决上述的问题，DNS服务应运而生。DNS协议提供通过域名查找IP地址，或逆向从IP地址反查域名的服务。<br /><br><img src="/blog/images/HTTP/images/1/9.png"><br /></p>
<h2 id="各种协议与HTTP协议的关系"><a href="#各种协议与HTTP协议的关系" class="headerlink" title="各种协议与HTTP协议的关系"></a>各种协议与HTTP协议的关系</h2><p>下图说明IP协议、TCP协议和DNS服务在使用HTTP协议的通信过程中各自发挥了哪些作用。<br /><br><img src="/blog/images/HTTP/images/1/10.png"><br /></p>
<h2 id="URI和URL"><a href="#URI和URL" class="headerlink" title="URI和URL"></a>URI和URL</h2><p>与URI(统一资源标识符)相比，我们更熟悉URL(Uniform Resource Locator，统一资源定位符)。URL正是使用Web浏览器等访问Web页面时需要输入的网页地址。比如，下图的<a target="_blank" rel="noopener" href="http://hackr.jp/%E5%B0%B1%E6%98%AFURL%E3%80%82">http://hackr.jp/就是URL。</a><br /><br><img src="/blog/images/HTTP/images/1/11.png"><br /></p>
<h3 id="统一资源标识符"><a href="#统一资源标识符" class="headerlink" title="统一资源标识符"></a>统一资源标识符</h3><p>URI是Uniform Resource Identifier的缩写。RFC2396分别对这3个单词进行了如下定义。<br /></p>
<ul>
<li>Uniform<br /><br>规定统一的格式可方便处理多种不同类型的资源，而不是根据上下文环境来识别资源指定的访问方式。另外，加入新增的协议方案(如http：或ftp：)也更容易。</li>
<li>Resource<br /><br>资源的定义是“可标识的任何东西”。不仅是文档文件，图像或服务(例如当天的天气预报)等能够区别于其他类型的，全都可作为资源。另外，资源不经可以是单一的，也可以是多数的集合体。</li>
<li>Identifier<br /><br>标识可标识的对象。也可称为标识符。</li>
</ul>
<p>综上所述，URI就是由某个协议方案表示的资源的定位标识符。协议方案是指访问资源所使用的协议类型名称。<br /><br>采用HTTP协议时，协议方案就是http。除此之外，还有ftp、mailto、telnet、file等。标准的URI协议方案有30种左右，由隶属于国际互联网资源管理的非营利社团ICANN(Internet Corporation for Assigned Names and Numbers，互联网名称与数字地址分配机构)的IANA(Internet Assigned Numbers Authority，互联网号码分配局)管理颁布。<br /></p>
<ul>
<li>IANA - Uniform Resource Identifier(URI) SCHEMES(统一资源标识符方案)<br><a target="_blank" rel="noopener" href="http://www.iana.org/assignments/uri-schemes">http://www.iana.org/assignments/uri-schemes</a><br /><br>URI用字符串标识某一互联网资源，而URL表示资源的地点(互联网上所处的位置)。可见URL是URI的子集。<br>“RFC3986：统一资源标识符(URI)通用语法”中列举了几种URI例子，如下所示。<br /><blockquote>
<p><a href="ftp://ftp.is.co.za/rfc/rfc1808.txt">ftp://ftp.is.co.za/rfc/rfc1808.txt</a><br /><br><a target="_blank" rel="noopener" href="http://www.ietf.org/rfc/rfc2396.txt">http://www.ietf.org/rfc/rfc2396.txt</a><br /><br>ldap:&#x2F;&#x2F;[2001:db8::7]&#x2F;c&#x3D;GB?objectClass?one<br /><br>mailto:<a href="mailto:&#x4a;&#111;&#104;&#110;&#46;&#x44;&#x6f;&#x65;&#64;&#x65;&#120;&#97;&#x6d;&#112;&#x6c;&#x65;&#46;&#99;&#111;&#x6d;">&#x4a;&#111;&#104;&#110;&#46;&#x44;&#x6f;&#x65;&#64;&#x65;&#120;&#97;&#x6d;&#112;&#x6c;&#x65;&#46;&#99;&#111;&#x6d;</a><br /><br>news:comp.infosystems.<a target="_blank" rel="noopener" href="http://www.servers.unix/">www.servers.unix</a><br /><br>tel:+1-816-555-1212<br /><br>telnet:&#x2F;&#x2F;192.0.2.16:80&#x2F;<br /><br>urn:oasis:names:specification:docbook:dtd:xml:4.1.2<br /></p>
</blockquote>
</li>
</ul>
<h3 id="URI格式"><a href="#URI格式" class="headerlink" title="URI格式"></a>URI格式</h3><p>表示指定的URI，要使用涵盖全部必要信息的绝对URI、绝对URL以及相对URL。相对URL，是指从浏览器中基本URI处指定的URL，形如&#x2F;image&#x2F;logo.gif。<br /><br>绝对URI的格式如下图：<br><img src="/blog/images/HTTP/images/1/12.png" alt="Alt text"><br /><br>使用http：或https：等协议方案名获取访问资源时要指定协议类型。不区分字母大小写，最后附一个冒号(:)。<br /><br>也可使用data：或javascript：这类指定数据或脚本程序的方案名。<br /></p>
<ul>
<li>登录信息(认证)<br /><br>指定用户名和密码作为从服务器端获取资源时必要的登录信息(身份认证)。此项是可选项。</li>
<li>服务器地址<br /><br>使用绝对URI必须指定待访问的服务器地址。地址可以是类似hackr.jp这种DNS可解析的名称，或是192.168.1.1这类IPv4地址名，还可以是[0:0:0:0:0:0:0:1]这样用方括号括起来的IPv6地址名。</li>
<li>服务器端口号<br /><br>指定服务器连接的网络端口号。此项也是可选项，若用户省略则自动使用默认端口号。</li>
<li>带层次的文件路径<br /><br>指定服务器上的文件路径来定位特指的资源。这与UNIX系统的文件目录结构相似。</li>
<li>查询字符串<br /><br>针对已指定的文件路径内的资源，可以使用查询字符串传入任意参数。此项可选。</li>
<li>片段标识符<br /><br>使用片段标识符通常可标记已获取资源中的子资源(文档内的某个位置)。但在RFC中并没有明确规定其使用方法。该项也为可选项。</li>
</ul>
<figure class="highlight txt"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">并不是所有应用程序都符合RFC</span><br><span class="line"></span><br><span class="line">有一些用来制定HTTP协议技术标准的文档，它们被称为RFC(Request For Comments，征求修改该意见书)。</span><br><span class="line">通常，应用程序会遵照由RFC确定的标准实现。可以说，RFC是互联网的设计文档，要是不按照RFC标准执行，就有可能导致无法通信的状况。比如，有一台Web服务器内的应用服务没有遵照RFC的标准实现，那Web浏览器就很可能无法访问这台服务器了。</span><br><span class="line">由于不遵照RFC标准实现就无法进行HTTP协议通信，所以基本上客户端和服务器端都会以RFC为标准来实现HTTP协议。但也存在某些应用程序因客户端或服务器端的不同，而未遵照RFC标准，反而将自成一套的“标准”扩展的情况。</span><br><span class="line">不按RFC标准来实现，当然也不必劳心费力让自己的“标准”符合其他所有的客户端和服务器端。但设想一下，如果这款应用程序的使用者非常多，那会发生什么情况？不难想象，其他的客户端或服务器端必然都不得不去配合它。</span><br><span class="line">实际在互联网上，已经实现了HTTP协议的一些服务器端和客户端里就存在上述情况。</span><br></pre></td></tr></table></figure></div>
        </div>
        
            <div class="kratos-copyright text-center clearfix">
                <h5 itemprop="copyrightNotice">本作品采用 <a rel="license nofollow" target="_blank" href="https://creativecommons.org/licenses/by-sa/4.0/">知识共享署名-相同方式共享 4.0 国际许可协议</a> 进行许可</h5>
            </div>
        
        <footer class="kratos-entry-footer clearfix">
            
                <div class="post-like-donate text-center clearfix" id="post-like-donate">
                
                
                    <a class="share" href="javascript:;"><i class="fa fa-share-alt"></i> 分享</a>
                    <div class="share-wrap" style="display: none;">
    <div class="share-group">
        <a href="javascript:;" class="share-plain qq" onclick="share('qq');" rel="nofollow">
            <div class="icon-wrap">
                <i class="fa fa-qq"></i>
            </div>
        </a>
        <a href="javascript:;" class="share-plain qzone" onclick="share('qzone');" rel="nofollow">
            <div class="icon-wrap">
                <i class="fa fa-star"></i>
            </div>
        </a>
        <a href="javascript:;" class="share-plain weixin pop style-plain" rel="nofollow">
            <div class="icon-wrap">
                <i class="fa fa-weixin"></i>
            </div>
            <div class="share-int">
                <div class="qrcode" id="wechat-qr"></div>
                <p>打开微信“扫一扫”，打开网页后点击屏幕右上角分享按钮</p>
            </div>
        </a>
        <a href="javascript:;" class="share-plain weibo" onclick="share('weibo');" rel="nofollow">
            <div class="icon-wrap">
                <i class="fa fa-weibo"></i>
            </div>
        </a>
        <a href="javascript:;" class="share-plain facebook style-plain" onclick="share('facebook');" rel="nofollow">
            <div class="icon-wrap">
                <i class="fa fa-facebook"></i>
            </div>
        </a>
        <a href="javascript:;" class="share-plain twitter style-plain" onclick="share('twitter');" rel="nofollow">
            <div class="icon-wrap">
                <i class="fa fa-twitter"></i>
            </div>
        </a>
    </div>
    <script type="text/javascript">
        $(()=>{
            new QRCode("wechat-qr", {
                text: "https://moon-cicada.gitee.io/blog/2023/11/03/HTTP/HTTP%E5%9F%BA%E7%A1%80/",
                width: 150,
                height: 150,
                correctLevel : QRCode.CorrectLevel.H
            });
        });
        function share(dest) {
            const qqBase        = "https://connect.qq.com/widget/shareqq/index.html?";
            const weiboBase     = "https://service.weibo.com/share/share.php?";
            const qzoneBase     = "https://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?";
            const facebookBase  = "https://www.facebook.com/sharer/sharer.php?";
            const twitterBase   = "https://twitter.com/intent/tweet?";
            const hostUrl       = "https://moon-cicada.gitee.io/blog/2023/11/03/HTTP/HTTP%E5%9F%BA%E7%A1%80/";
            const title         = "「HTTP基础」";
            const excerpt       = `使用HTTP协议访问Web你知道当我们在网页浏览器(Web browser)的地址栏中输入URL时，Web页面是如何呈现的吗？Web页面当然不能凭空显示出来。根据Web浏览器地址栏中指定的URL，Web浏览器从Web服务器端获取文件资...`;
            let _URL;
            switch (dest) {
                case "qq"       : _URL = qqBase+"url="+hostUrl+"&title="+title+"&desc=&summary="+excerpt+"&site=cxpy";     break;
                case "weibo"    : _URL = weiboBase+"url="+hostUrl+"&title="+title+excerpt;                                 break;
                case "qzone"    : _URL = qzoneBase+"url="+hostUrl+"&title="+title+"&desc=&summary="+excerpt+"&site=cxpy";  break;
                case "facebook" : _URL = facebookBase+"u="+hostUrl;                                                        break;
                case "twitter"  : _URL = twitterBase+"text="+title+excerpt+"&url="+hostUrl;                                break;
            }
            window.open(_URL);
        };
    </script>
</div>
                
                </div>
            
            <div class="footer-tag clearfix">
                <div class="pull-left">
                <i class="fa fa-tags"></i>
                    <a class="tag-none-link" href="/blog/tags/HTTP/" rel="tag">HTTP</a>, <a class="tag-none-link" href="/blog/tags/%E5%8D%8F%E8%AE%AE/" rel="tag">协议</a>, <a class="tag-none-link" href="/blog/tags/%E5%9F%BA%E7%A1%80/" rel="tag">基础</a>
                </div>
                <div class="pull-date">
                    <time datetime="2023-11-03T11:03:21.282Z" itemprop="dateModified">最后编辑：2023-11-03</time>
                </div>
            </div>
        </footer>
    </div>
    
        <nav class="navigation post-navigation clearfix" role="navigation">
            
            <div class="nav-previous clearfix">
                <a title=" 文档类型声明标签" href="/blog/2023/10/31/HTML/文档类型声明标签/">&lt; 上一篇</a>
            </div>
            
            
        </nav>
    
    
        <div id="v-comments" class="post-comments"></div>
<script>
    var load_comm = () => {
        const init = () => {
            new Valine({
                el: '#v-comments',
                appId: 'cM5eOxMg63PZfmD94zakD07F-gzGzoHsz',
                appKey: 'Ig7h0RQDY2duLi5iYpxbM1ZW',
                visitor: true,
                enableQQ: true,
                path: '/blog/2023/11/03/HTTP/HTTP%E5%9F%BA%E7%A1%80/'
            });
        }
        if (typeof Valine === 'undefined') {
            const src = '/blog/vendors/valine@1.4.18/dist/Valine.min.js';
            $.getScript(src, init);
        } else {
            init();
        }
    };
</script>
<noscript>Please enable JavaScript to view the <a target="_blank" rel="noopener" href="https://valine.js.org/">comments powered by Valine.</a></noscript>

    
</article>

        

            </section>

        

                
            

<section id="kratos-widget-area" class="col-md-4 hidden-xs hidden-sm">
    <!-- 文章和页面根据splitter来分割，没有的话就从头开始设置为sticky -->
    
    
                <aside id="krw-about" class="widget widget-kratos-about clearfix">
    <div class="photo-background"></div>
    <div class="photo-wrapper clearfix">
        <div class="photo-wrapper-tip text-center">
            <img class="about-photo" src="/blog/images/avaths.webp" loading="lazy" decoding="auto" />
        </div>
    </div>
    <div class="textwidget">
        <p class="text-center"></p>
    </div>
    <div class="site-meta">
        <a class="meta-item" href="/blog/archives/">
            <span class="title">
                文章
            </span>
            <span class="count">
                6
            </span>
        </a>
        <a class="meta-item" href="/blog/categories/">
            <span class="title">
                分类
            </span>
            <span class="count">
                4
            </span>
        </a>
        <a class="meta-item" href="/blog/tags/">
            <span class="title">
                标签
            </span>
            <span class="count">
                6
            </span>
        </a>
    </div>
</aside>
            
                    <div class="sticky-area">
                
                    <aside id="krw-toc" class="widget widget-kratos-toc clearfix toc-div-class" >
    <div class="photo-background"></div>
    <h4 class="widget-title no-after">
        <i class="fa fa-compass"></i>
        文章目录
        <span class="toc-progress-bar" role="progressbar" aria-label="阅读进度："></span>
    </h4>
    <div class="textwidget">
        <ol class="toc"><li class="toc-item toc-level-2"><a class="toc-link" href="#%E4%BD%BF%E7%94%A8HTTP%E5%8D%8F%E8%AE%AE%E8%AE%BF%E9%97%AEWeb"><span class="toc-text">使用HTTP协议访问Web</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#HTTP%E7%9A%84%E8%AF%9E%E7%94%9F"><span class="toc-text">HTTP的诞生</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#%E4%B8%BA%E7%9F%A5%E8%AF%86%E5%85%B1%E4%BA%AB%E8%80%8C%E8%A7%84%E5%88%92Web"><span class="toc-text">为知识共享而规划Web</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#Web%E6%88%90%E9%95%BF%E6%97%B6%E4%BB%A3"><span class="toc-text">Web成长时代</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E9%A9%BB%E8%B6%B3%E4%B8%8D%E5%89%8D%E7%9A%84HTTP"><span class="toc-text">驻足不前的HTTP</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E7%BD%91%E7%BB%9C%E5%9F%BA%E7%A1%80TCP-IP%E4%BB%8B%E7%BB%8D"><span class="toc-text">网络基础TCP&#x2F;IP介绍</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#TCP-IP%E5%8D%8F%E8%AE%AE%E6%97%8F"><span class="toc-text">TCP&#x2F;IP协议族</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#TCP-IP%E7%9A%84%E5%88%86%E5%B1%82%E7%AE%A1%E7%90%86"><span class="toc-text">TCP&#x2F;IP的分层管理</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#TCP-IP%E9%80%9A%E4%BF%A1%E4%BC%A0%E8%BE%93%E6%B5%81"><span class="toc-text">TCP&#x2F;IP通信传输流</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E4%B8%8EHTTP%E5%85%B3%E7%B3%BB%E5%AF%86%E5%88%87%E7%9A%84%E5%8D%8F%E8%AE%AE%EF%BC%9AIP%E3%80%81TCP%E5%92%8CDNS"><span class="toc-text">与HTTP关系密切的协议：IP、TCP和DNS</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#%E8%B4%9F%E8%B4%A3%E4%BC%A0%E8%BE%93%E7%9A%84IP%E5%8D%8F%E8%AE%AE"><span class="toc-text">负责传输的IP协议</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E7%A1%AE%E4%BF%9D%E5%8F%AF%E9%9D%A0%E6%80%A7%E7%9A%84TCP%E5%8D%8F%E8%AE%AE"><span class="toc-text">确保可靠性的TCP协议</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E8%B4%9F%E8%B4%A3%E5%9F%9F%E5%90%8D%E8%A7%A3%E6%9E%90%E7%9A%84DNC%E6%9C%8D%E5%8A%A1"><span class="toc-text">负责域名解析的DNC服务</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%90%84%E7%A7%8D%E5%8D%8F%E8%AE%AE%E4%B8%8EHTTP%E5%8D%8F%E8%AE%AE%E7%9A%84%E5%85%B3%E7%B3%BB"><span class="toc-text">各种协议与HTTP协议的关系</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#URI%E5%92%8CURL"><span class="toc-text">URI和URL</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#%E7%BB%9F%E4%B8%80%E8%B5%84%E6%BA%90%E6%A0%87%E8%AF%86%E7%AC%A6"><span class="toc-text">统一资源标识符</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#URI%E6%A0%BC%E5%BC%8F"><span class="toc-text">URI格式</span></a></li></ol></li></ol>
    </div>
</aside>
                
                
  <aside id="krw-categories" class="widget widget-kratos-categories clearfix">
    <h4 class="widget-title"><i class="fa fa-folder"></i>分类目录</h4>
      <ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/blog/categories/HTTP/">HTTP</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/blog/categories/Hello/">Hello</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/blog/categories/html/">html</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/blog/categories/%E6%B5%8F%E8%A7%88%E5%99%A8%E5%8E%9F%E7%90%86/">浏览器原理</a><span class="category-list-count">2</span></li></ul>
  </aside>


            
                
  <aside id="krw-tags" class="widget widget-kratos-tags clearfix">
    <h4 class="widget-title"><i class="fa fa-tags"></i>标签聚合</h4>
      <div class="tag-clouds">
        <a href="/blog/tags/Chrome/" style="font-size: 0.7em;">Chrome</a> <a href="/blog/tags/HTTP/" style="font-size: 0.6em;">HTTP</a> <a href="/blog/tags/%E5%89%8D%E7%AB%AF/" style="font-size: 0.7em;">前端</a> <a href="/blog/tags/%E5%8D%8F%E8%AE%AE/" style="font-size: 0.6em;">协议</a> <a href="/blog/tags/%E5%8E%9F%E7%90%86/" style="font-size: 0.7em;">原理</a> <a href="/blog/tags/%E5%9F%BA%E7%A1%80/" style="font-size: 0.8em;">基础</a>
      </div>
  </aside>

            
                
  <aside id="krw-posts" class="widget widget-kratos-posts">
  <h4 class="widget-title"><i class="fa fa-file"></i>最新文章</h4>
  <div class="tab-content">
      <ul class="list-group">
        
        
          
          
            <a class="list-group-item" href="/blog/2023/11/03/HTTP/HTTP%E5%9F%BA%E7%A1%80/"><i class="fa  fa-book"></i> HTTP基础</a>
            
          
        
          
          
            <a class="list-group-item" href="/blog/2023/10/31/HTML/%E6%96%87%E6%A1%A3%E7%B1%BB%E5%9E%8B%E5%A3%B0%E6%98%8E%E6%A0%87%E7%AD%BE/"><i class="fa  fa-book"></i> 文档类型声明标签</a>
            
          
        
          
          
            <a class="list-group-item" href="/blog/2023/10/31/HTML/html%E5%9F%BA%E7%A1%80/"><i class="fa  fa-book"></i> html基础</a>
            
          
        
          
          
            <a class="list-group-item" href="/blog/2023/10/29/%E6%B5%8F%E8%A7%88%E5%99%A8%E5%8E%9F%E7%90%86/%E6%B5%8F%E8%A7%88%E5%99%A8%E6%B8%B2%E6%9F%93%E5%8E%9F%E7%90%86/"><i class="fa  fa-book"></i> 浏览器渲染原理</a>
            
          
        
          
          
            <a class="list-group-item" href="/blog/2023/10/29/%E6%B5%8F%E8%A7%88%E5%99%A8%E5%8E%9F%E7%90%86/%E4%BA%8B%E4%BB%B6%E5%BE%AA%E7%8E%AF/"><i class="fa  fa-book"></i> 事件循环</a>
            
          
        
          
            
      </ul>
  </div>
  </aside>

            
    </div>
</section>
        
        </div>
    </div>
</div>
<footer>
    <div id="footer"  class="ap-lrc"  >
        <div class="container">
            <div class="row">
                <div class="col-md-6 col-md-offset-3 footer-list text-center">
                    <ul class="kratos-social-icons">
                        <!-- Keep for compatibility -->
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        <!-- New links -->
                        
                    </ul>
                    <ul class="kratos-copyright">
                        <div>
                            <li>&copy; 2023 月蝉の小窝 版权所有.</li>
                            <li>本站已运行<span id="span_dt">Loading...</span></li>
                        </div>
                        <div>
                            <li>Theme <a href="https://github.com/Candinya/Kratos-Rebirth" target="_blank">Kratos:Rebirth</a></li>
                            <li>Site built with&nbsp;<i class="fa fa-heart throb" style="color:#d43f57"></i>&nbsp;by 月蝉.</li>
                        </div>
                        <div>
                            <li>Powered by <a href="https://hexo.io" target="_blank" rel="nofollow">Hexo</a></li>
                            <li>Hosted on <a href="https://github.io" target="_blank">Github Pages</a></li>
                        </div>
                        <div>
                            
                            
                        </div>
                    </ul>
                </div>
            </div>
        </div>
        <div class="kr-tool text-center">
            <div class="tool">
                
                    <div class="box search-box">
                        <a href="/blog/search/">
                            <span class="fa fa-search"></span>
                        </a>
                    </div>
                
                
                    <div class="box theme-box" id="darkmode-switch">
                        <span class="fa fa-adjust"></span>
                    </div>
                
                
                    <div class="box theme-box" id="snow-switch">
                        <span class="fa fa-snowflake-o"></span>
                    </div>
                
                
            </div>
            <div class="box gotop-box">
                <span class="fa fa-chevron-up"></span>
            </div>
        </div>
    </div>
</footer>
</div>
</div>

        <script defer src="/blog/vendors/bootstrap@3.3.4/dist/js/bootstrap.min.js"></script>
<script defer src="/blog/vendors/nprogress@0.2.0/nprogress.js"></script>
<script>
    if (!window.kr) {
        window.kr = {};
    }
    window.kr.notMobile = (!(navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i)));
    window.kr.siteRoot = "/blog/";
</script>

    <div>
        <canvas id="snow"></canvas>
        <script async src="/blog/js/snow.min.js"></script>
    </div>


    <script async src="/blog/js/candy.min.js"></script>



    <script defer src="/blog/vendors/aplayer@1.10.1/dist/APlayer.min.js"></script>
    
    <script defer src="/blog/vendors/meting@2.0.1/dist/Meting.min.js"></script>
    <meting-js
        server="netease"
        type="playlist"
        id="3204190542"
        order="random"
        fixed="true"
    >
    </meting-js>



    <script defer src="/blog/vendors/@fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.js"></script>

<script defer src="/blog/js/kratosr.min.js"></script>
<script defer src="/blog/js/pjax.min.js"></script>



<!-- Extra support for third-party plguins  -->


    </body>
</html>